import {
  setToken,
  getToken,
  removeToken
} from '@/utils/auth'
import {
  login,
  getUserInfo,
  getUserDetailById
} from '@/api/user'

export default {
  namespaced: true,
  // 如果需要复用的话，为了保证数据的独立性，需要定义炒年糕函数的形式
  // 因为函数每次执行的之后返回的对象都拥有一个独立的内存
  // 而直接给一个对象， 因为对象是引用数据类型，服用的时候大家会共享数据 一处修改别的地方也还会受到影响
  state: {
    token: getToken() || '',
    userInfo: {}
  },
  mutations: {
    setToken(state, payload) {
      state.token = payload
      setToken(payload)
    },
    setUserToken(state, payload) {
      state.userInfo = payload
    },
    removeToken(state) {
      state.token = ''
      state.userInfo = {}
      removeToken()
    }
  },
  actions: {
    async resToken(ctx, payload) {
      const res = await login(payload)
      ctx.commit('setToken', res)
    },
    async getUserInfo(ctx) {
      // 请求用户资料
      const res = await getUserInfo()
      // 请求用户头像
      const imgInfo = await getUserDetailById(res.userId)
      // 结构赋值 把res的数据和img合并到一起
      ctx.commit('setUserToken', { ...res, ...imgInfo })
      return res
    }
  }
}
